cssnumbervalue: Remove gtk_css_number_value_get_unit()
authorBenjamin Otte <otte@redhat.com>
Fri, 12 Feb 2016 03:40:35 +0000 (04:40 +0100)
committerBenjamin Otte <otte@redhat.com>
Sat, 13 Feb 2016 03:49:07 +0000 (04:49 +0100)
This is in preparation for calc(), as calc(50% - 5px) is valid CSS
but has 2 units. Instead, add a function to query a value's dimension
(so we can differentiate lengths from numbers) and add a function to
query if the value contains percentages.

gtk/gtkcssimageradial.c
gtk/gtkcssnumbervalue.c
gtk/gtkcssnumbervalueprivate.h
gtk/gtkcssshorthandpropertyimpl.c
gtk/gtkcsstypes.c
gtk/gtkcsstypesprivate.h
gtk/gtkrenderborder.c

index f52fef10d838f379b634c6ea682cc28f4260a75d..8febdc4d397e09457264ad1bf18ab9523f24a14e 100644 (file)
@@ -337,7 +337,7 @@ gtk_css_image_radial_parse (GtkCssImage  *image,
           return FALSE;
         }
 
-      if (radial->sizes[0] && _gtk_css_number_value_get_unit (radial->sizes[0]) == GTK_CSS_PERCENT)
+      if (radial->sizes[0] && gtk_css_number_value_has_percent (radial->sizes[0]))
         {
           _gtk_css_parser_error (parser, "Circular gradient cannot have percentage as size");
           return FALSE;
index d32bff54e1fdf1ad25543790cfd83a2a0368404b..86b4c40dc83d9c0071aabc84c3087fdba34a93b9 100644 (file)
@@ -265,12 +265,20 @@ _gtk_css_number_value_new (double     value,
   return result;
 }
 
-GtkCssUnit
-_gtk_css_number_value_get_unit (const GtkCssValue *value)
+GtkCssDimension
+gtk_css_number_value_get_dimension (const GtkCssValue *value)
 {
-  g_return_val_if_fail (value->class == &GTK_CSS_VALUE_NUMBER, GTK_CSS_NUMBER);
+  g_return_val_if_fail (value->class == &GTK_CSS_VALUE_NUMBER, GTK_CSS_DIMENSION_PERCENTAGE);
 
-  return value->unit;
+  return gtk_css_unit_get_dimension (value->unit);
+}
+
+gboolean
+gtk_css_number_value_has_percent (const GtkCssValue *value)
+{
+  g_return_val_if_fail (value->class == &GTK_CSS_VALUE_NUMBER, FALSE);
+
+  return gtk_css_unit_get_dimension (value->unit) == GTK_CSS_DIMENSION_PERCENTAGE;
 }
 
 double
index b9bb6994e668170e356729bd6b1b771ebd33ac0a..454374bffe66317351423f4dddcb8023b0ba6ac4 100644 (file)
@@ -42,7 +42,9 @@ GtkCssValue *   _gtk_css_number_value_new           (double                  val
 GtkCssValue *   _gtk_css_number_value_parse         (GtkCssParser           *parser,
                                                      GtkCssNumberParseFlags  flags);
 
-GtkCssUnit      _gtk_css_number_value_get_unit      (const GtkCssValue      *value);
+GtkCssDimension gtk_css_number_value_get_dimension  (const GtkCssValue      *value);
+gboolean        gtk_css_number_value_has_percent    (const GtkCssValue      *value);
+
 double          _gtk_css_number_value_get           (const GtkCssValue      *number,
                                                      double                  one_hundred_percent);
 
index 4e5495fca96ac7669d75fc3cdb9e80acf599b31a..f10a180d3a11e20bc71dc261dc59f399d3d17c61 100644 (file)
@@ -736,7 +736,7 @@ parse_one_animation (GtkCssShorthandProperty  *shorthand,
           if (value == NULL)
             return FALSE;
 
-          if (_gtk_css_number_value_get_unit (value) == GTK_CSS_NUMBER)
+          if (gtk_css_number_value_get_dimension (value) == GTK_CSS_DIMENSION_NUMBER)
             values[1] = value;
           else if (values[2] == NULL)
             values[2] = value;
index 2e93cbca56b7db4e147ff3b395cdd044b1b2b83b..45e6caf8ee966127186600abc82eff32799394b5 100644 (file)
@@ -138,6 +138,44 @@ gtk_css_change_print (GtkCssChange  change,
     }
 }
 
+GtkCssDimension
+gtk_css_unit_get_dimension (GtkCssUnit unit)
+{
+  switch (unit)
+    {
+    case GTK_CSS_NUMBER:
+      return GTK_CSS_DIMENSION_NUMBER;
+
+    case GTK_CSS_PERCENT:
+      return GTK_CSS_DIMENSION_PERCENTAGE;
+
+    case GTK_CSS_PX:
+    case GTK_CSS_PT:
+    case GTK_CSS_EM:
+    case GTK_CSS_EX:
+    case GTK_CSS_REM:
+    case GTK_CSS_PC:
+    case GTK_CSS_IN:
+    case GTK_CSS_CM:
+    case GTK_CSS_MM:
+      return GTK_CSS_DIMENSION_LENGTH;
+
+    case GTK_CSS_RAD:
+    case GTK_CSS_DEG:
+    case GTK_CSS_GRAD:
+    case GTK_CSS_TURN:
+      return GTK_CSS_DIMENSION_ANGLE;
+
+    case GTK_CSS_S:
+    case GTK_CSS_MS:
+      return GTK_CSS_DIMENSION_TIME;
+
+    default:
+      g_assert_not_reached ();
+      return GTK_CSS_DIMENSION_PERCENTAGE;
+    }
+}
+
 char *
 gtk_css_change_to_string (GtkCssChange change)
 {
index b89ada1f7d9fff6fdb0df588028ec733be15877c..857c8238600d011b8704b576319c5ef1d7be9964 100644 (file)
@@ -341,6 +341,14 @@ typedef enum /*< skip >*/ {
   GTK_CSS_BOTTOM_LEFT
 } GtkCssCorner;
 
+typedef enum /*< skip >*/ {
+  GTK_CSS_DIMENSION_PERCENTAGE,
+  GTK_CSS_DIMENSION_NUMBER,
+  GTK_CSS_DIMENSION_LENGTH,
+  GTK_CSS_DIMENSION_ANGLE,
+  GTK_CSS_DIMENSION_TIME
+} GtkCssDimension;
+
 typedef enum /*< skip >*/ {
   /* CSS term: <number> */
   GTK_CSS_NUMBER,
@@ -369,6 +377,8 @@ typedef enum /*< skip >*/ {
 GtkCssChange            _gtk_css_change_for_sibling              (GtkCssChange       match);
 GtkCssChange            _gtk_css_change_for_child                (GtkCssChange       match);
 
+GtkCssDimension         gtk_css_unit_get_dimension               (GtkCssUnit         unit);
+
 char *                  gtk_css_change_to_string                 (GtkCssChange       change);
 void                    gtk_css_change_print                     (GtkCssChange       change,
                                                                   GString           *string);
index 6940f6f6deee2581fae3f08b57972bc9b61dffdd..47fdba43d4738133183f8882d9707c334d0b1fa4 100644 (file)
@@ -83,11 +83,11 @@ gtk_border_image_compute_border_size (GtkBorderImageSliceSize  sizes[3],
 {
   double start, end;
 
-  if (_gtk_css_number_value_get_unit (start_border) == GTK_CSS_NUMBER)
+  if (gtk_css_number_value_get_dimension (start_border) == GTK_CSS_DIMENSION_NUMBER)
     start = start_border_width * _gtk_css_number_value_get (start_border, 100);
   else
     start = _gtk_css_number_value_get (start_border, area_size);
-  if (_gtk_css_number_value_get_unit (end_border) == GTK_CSS_NUMBER)
+  if (gtk_css_number_value_get_dimension (end_border) == GTK_CSS_DIMENSION_NUMBER)
     end = end_border_width * _gtk_css_number_value_get (end_border, 100);
   else
     end = _gtk_css_number_value_get (end_border, area_size);